<!--
  功能：班主任管理
  作者：licy
  邮箱：licy@briup.com
  时间：2021年01月05日 16:03:18
  版本：v1.0
  修改记录：
  修改内容：
  修改人员：
  修改时间：
-->
<template>
  <div class='employee_list'>
    <!-- 按钮区域 -->
    <div class="btns">
      <el-row>
        <el-col :span="16">
          <el-form inline size="small">
            <el-form-item >
              <el-input v-model="param.realname" placeholder="请输入姓名关键字" clearable></el-input>
            </el-form-item>
            <el-form-item>
              <el-button @click="loadEmployees">搜索</el-button>
            </el-form-item>
          </el-form>
        </el-col>
        <el-col :span="8" style="text-align:right">
          <el-button type="primary" size="small" @click="toSaveHandler">新增</el-button>
        </el-col>
      </el-row>
    </div>
    <!-- 按钮区域结束 -->
    <!-- 表格 -->
    <div class="employees">
      <el-table :data="employeeData.list" size="small">
        <el-table-column type="index" :index="1" label="序号"></el-table-column>
        <el-table-column prop="realname" label="姓名" width="120" align="center"></el-table-column>
        <el-table-column prop="gender" label="性别" width="120" align="center"></el-table-column>
        <el-table-column prop="telephone" label="手机号" align="center"></el-table-column>
        <el-table-column label="操作" width="100" align="center">
          <template slot-scope="scope">
            <el-button type="text" size="mini" @click="toEditHandler(scope.row)">修改</el-button>
            <el-button type="text" size="mini" @click="toDeleteHandler(scope.row)">删除</el-button>
          </template>
        </el-table-column>
      </el-table>
    </div>
    <!-- 表格结束 -->
    <!-- 分页 -->
   <div class="page">
      <el-pagination background 
        layout="prev, pager, next,sizes" 
        small
        :total="employeeData.total" 
        :page-size="employeeData.pageSize" 
        :current-page="employeeData.page"
        :page-sizes="[5, 10, 15, 20]"
        @size-change="handleSizeChange"
        @current-change="currentChangeHandler">
      </el-pagination>
   </div>
    <!-- 分页 -->
    <!-- 抽屉 -->
    <Briupdrawer :drawer-visible="visible" :title="title" width="40%" @on-change-visible="handlerVisibleChange" >
      <div slot="content">
        <el-form :model="form" ref="employeeForm" :rules="rules" label-width="80px" size="small">
          <div class="sub_title"><i class="el-icon-upload"></i> 基本信息</div>
          <el-row>
            <el-col :span="24">
              <el-form-item label="姓名" prop="realname">
                <el-input v-model="form.realname"></el-input>
              </el-form-item>
              <el-form-item label="手机号" prop="telephone">
                <el-input v-model="form.telephone"></el-input>
              </el-form-item>
              <el-form-item label="性别" prop="gender">
                <el-radio-group v-model="form.gender">
                  <el-radio label="男">男</el-radio>
                  <el-radio label="女">女</el-radio>
                </el-radio-group>
              </el-form-item>
            </el-col>
          </el-row>
          <div class="sub_title"><i class="el-icon-upload"></i> 账号信息 <span style="color:red">不可读写，系统自动</span></div>
          <el-form-item label="用户名">
            <el-input v-model="form.telephone" v-if="!form.id" readonly></el-input>
            <el-input v-model="form.user.username" v-else readonly></el-input>
          </el-form-item>
          <el-form-item label="密码">
            <el-input value="briup@2021" readonly="" v-if="!form.id"></el-input>
            <el-input type="password" v-else v-model="form.user.password" readonly=""></el-input>
          </el-form-item>
        </el-form>
      </div>
      <span slot="footer" class="dialog-footer">
        <el-button size="small" @click="visible = false">取消</el-button>
        <el-button size="small" type="primary" @click="submitHandler">确定</el-button>
      </span>
    </Briupdrawer>
    <!-- 抽屉结束 -->
  </div>
</template>

<script>
import {get,post} from '@/utils/request'
import _ from 'lodash'
import Tinymce from '@/components/Tinymce'
export default {
  // 组件名称
  name: 'demo',
  // 组件参数 接收来自父组件的数据
  props: {},
  // 组件状态值
  data () {
   return {
    visible:false,
    loading:false,
    title:"",
    param:{
      page:1,
      pageSize:15,
      deptId:2  //班主任
    },
    employeeData:{
      list:[]
    },
    fileList:[],
    form:{
      gender:"男",
      deptId:2
    },
    rules:{
      realname: [ { required: true, message: '请输入姓名', trigger: 'blur' } ],
      telephone: [ { required: true, message: '请输入手机号', trigger: 'blur' } ],
      gender: [ { required: true, message: '请选择性别', trigger: 'chage' } ]
    }
   }
  },
  // 计算属性
  computed: {},
  components: { Tinymce },
  // 侦听器
  watch: {},
  // 组件方法
  methods: {
    // 确认提交处理函数
    submitHandler(){
      // 表单校验
      this.$refs['employeeForm'].validate((valid) => {
        if (valid) {
          // 校验通过后，完成数据交互
          let url = '/employee/saveOrUpdate'
          post(url,this.form).then(response => {
            this.$message({type:"success",message:response.message})
            this.loadEmployees();
            this.visible = false;
          })
        } else {
          return false;
        }
      });
    },
    // 去保存
    toSaveHandler(){
      this.title = "新增班主任信息";
      this.form = {
        gender:"男",
        deptId:2
      };
      this.fileList = [];
      this.visible = true;
    },
    // 去修改
    toEditHandler(row){
      this.fileList = [];
      // 修改抽屉标题
      this.title = "修改班主任信息"
      // 将当前行数据的克隆对象赋值给当前form,这样可以避免修改表单数据导致表格数据发生变化。
      this.form = _.clone(row);
      // 显示抽屉
      this.visible = true;
    },
    // 去删除
    toDeleteHandler(row){
      this.$confirm('此操作将永久删除该数据, 是否继续?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        let url = '/employee/deleteById'
        get(url,{id:row.id}).then(response =>{
          this.$message({ type: 'success', message: '删除成功!' });
          this.loadEmployees();
        })
      })
    },
    // 查询班主任信息
    loadEmployees(){
      // 添加loading,页面加载开始
      this.loading = true;
      let url = "/employee/pageQuery"
      get(url,this.param).then(response => {
        this.employeeData = response.data;
        // 页面加载结束
        this.loading = false;
      })
    },
    // 当前页发生改变
    currentChangeHandler(page){
      this.param.page = page;
      this.loadEmployees();
    },
    // 处理分页大小变化的函数
    handleSizeChange(pageSize){
      // 当前页为第一页
      this.page = 1;
      // 页面大小为用户选择的页面
      this.param.pageSize = pageSize;
      this.loadEmployees();
    },
    // 重置表单校验
    clearValidate() {
      this.$refs['employeeForm'].clearValidate();
    },
    // 处理visible变化的钩子函数，解决抽屉无法收缩的bug
    handlerVisibleChange(val) {
      this.visible = val
    }
  },
  // 以下是生命周期钩子
  /**
  * 组件实例创建完成，属性已绑定，但DOM还未生成，$ el属性还不存在
  */
  created () {
    // 加载班主任信息
    this.loadEmployees();
  },
  /**
  * el 被新创建的 vm.$ el 替换，并挂载到实例上去之后调用该钩子。
  * 如果 root 实例挂载了一个文档内元素，当 mounted 被调用时 vm.$ el 也在文档内。
  */
  mounted () {
  },
  /**
  * 实例销毁之前调用。在这一步，实例仍然完全可用。
  */
  beforeDestroy () {
  },
  /**
  * Vue 实例销毁后调用。调用后，Vue 实例指示的所有东西都会解绑定，
  * 所有的事件监听器会被移除，所有的子实例也会被销毁。
  */
  destroyed () {
  }
}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<!--使用了scoped属性之后，父组件的style样式将不会渗透到子组件中，-->
<!--然而子组件的根节点元素会同时被设置了scoped的父css样式和设置了scoped的子css样式影响，-->
<!--这么设计的目的是父组件可以对子组件根元素进行布局。-->

<style scoped lang="scss">

</style>